using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DominioSATT;
using RepositorioSATT;
using System.Data;

namespace ServiceSATT
{
    public class FederacionService : IFederacionService
    {
        IFederacionRepositorio repositorio;
        public void ObtenerFederacion(IInterfazFederacion ui)
        {
            IFederacionRepositorio repositorio = new FederacionRepositorio();
            int IdFederacion = repositorio.ObtenerID(ui.Nombre);
            Federacion Objeto = repositorio.Buscar(IdFederacion);
            ui.Nombre = Objeto.Nombre;
            ui.Iniciales = Objeto.Iniciales;
            ui.Estado = Objeto.Estado;
        }

        public int Agregar(IInterfazFederacion ui)
        {
            repositorio = new FederacionRepositorio();
            //Genero Objeto de tipo Pais
            IPaisService pService = new UbicacionService();
            int idPais = pService.BuscarID(ui.Pais);
            Pais nPais = new Pais(idPais, ui.Pais, true);
            //Genero Objeto de tipo Provincia
            IProvinciaService prService = new UbicacionService();
            int idProvincia = prService.BuscarID(ui.Provincia);
            Provincia nProv = new Provincia(idProvincia, ui.Provincia, true, nPais);
            //Genero Objeto de tipo Localidad
            ILocalidadService lService = new UbicacionService();
            int idLocalidad = lService.BuscarID(ui.Localidad);
            Localidad nLoc = new Localidad(idLocalidad, ui.Localidad, true, nProv);
            //Genero Objeto de tipo Federacion
            Federacion nFed = new Federacion(ui.Nombre, ui.Iniciales, nPais, nProv, nLoc, true);
            
            return repositorio.Agregar(nFed);
        }

        public void Actualizar(IInterfazFederacion ui)
        {
            //Genero Objeto de tipo Pais
            IPaisService pService = new UbicacionService();
            int idPais = pService.BuscarID(ui.Pais);
            Pais nPais = new Pais(idPais, ui.Pais, true);
            //Genero Objeto de tipo Provincia
            IProvinciaService prService = new UbicacionService();
            int idProvincia = prService.BuscarID(ui.Provincia);
            Provincia nProv = new Provincia(idProvincia, ui.Provincia, true, nPais);
            //Genero Objeto de tipo Localidad
            ILocalidadService lService = new UbicacionService();
            int idLocalidad = lService.BuscarID(ui.Localidad);
            Localidad nLoc = new Localidad(idLocalidad, ui.Localidad, true, nProv);
            //Genero Objeto de tipo Federacion
            Federacion nFed = new Federacion(ui.Id, ui.Nombre, ui.Iniciales, nPais, nProv, nLoc, true);
            repositorio = new FederacionRepositorio();
            repositorio.Actualizar(nFed);
        }

        public void ListaFederacion(IListadoFederacion ui)
        {
            repositorio = new FederacionRepositorio();
            List<Federacion> ListaFederaciones = repositorio.Listar();
            string[][] Lista = new string[ListaFederaciones.Count][];
            int i = 0;
            foreach(Federacion Fed in ListaFederaciones)
            {
                string[] valores = new string[] { Fed.Nombre, Fed.Iniciales, Fed.Pais.Nombre, Fed.Provincia.Nombre, Fed.Localidad.Nombre, Fed.Estado.ToString() };
                Lista[i] = valores;
                i++;
            }
            ui.Listado = Lista;
        }

        public int ObtenerID(string NombreFederacion)
        {
            repositorio = new FederacionRepositorio();
            return repositorio.ObtenerID(NombreFederacion);
        }

        #region IFederacionService Members


        public System.Data.DataTable ReporteFederacion()
        {
            IFederacionRepositorio federac = new FederacionRepositorio();
            DataTable dt = federac.ListaFederacion();
            return dt;
        }

        #endregion

    }
}
